﻿using CommunityToolkit.Mvvm.ComponentModel;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Automation.Provider;
using System.Windows.Controls;
using System.Windows.Data;

namespace WPF_for_Auth.ViewModel
{
    internal partial class PageStatus : ObservableObject
    {
        #region 基础页面
        private PageS.RBAC.Page_PageManager _pageManager = null;// 页面管理器
        private PageS.RBAC.Page_RoleManager _pageRoleManager = null;// 角色管理器
        private PageS.RBAC.Page_UserManager _pageUserManager = null;// 用户管理器
        private PageS.RBAC.Page_MenuManager _pageMenuManager = null;// 菜单管理器

        private PageS.RBAC.Page_PageManager_Detail _pagePageManagerDetail = null;// 页面管理器详情页 
        #endregion


        /// <summary>
        /// 这个编辑ID是公用的，对于查询详情，编辑之类的都要依靠这个来进行精确查询。
        /// 2025年7月2日08:59:17
        /// </summary>
        [ObservableProperty]
        private string editID;

        /// <summary>
        /// 当前页面状态
        /// </summary>
        [ObservableProperty]
        private UserControl currentPage;
        /// <summary>
        /// 上一个页面状态
        /// </summary>
        [ObservableProperty]
        private UserControl previousPage;

        private readonly MvvmLoad _mvvmLoad;
        public PageStatus(MvvmLoad mvvmLoad)
        {
            // 这里可以传入 MvvmLoad 实例以便访问其他状态或方法
            _mvvmLoad = mvvmLoad ?? throw new ArgumentNullException(nameof(mvvmLoad));

            // 初始化时可以设置默认值或执行其他逻辑
            // 例如，可以设置当前页面的初始状态
            CurrentPage = null; // 默认页面为首页
        }

        public void ChoosePage(string pageName)
        {
            // 根据传入的页面名称选择对应的页面
            switch (pageName)
            {
                case "PageManager":
                    {
                        if (_pageManager == null)
                        {
                            _pageManager = new PageS.RBAC.Page_PageManager();
                        }
                        _mvvmLoad?.App_DbOperate.PageManagerLoad(); // 加载页面管理器数据
                        DealWithPageChange(_pageManager);
                    }
                    break;
                case "MenuManager":
                    {
                        if (_pageMenuManager == null)
                        {
                            _pageMenuManager = new PageS.RBAC.Page_MenuManager();
                        }
                        DealWithPageChange(_pageMenuManager);
                    }
                    break;
                case "RoleManager":
                    {
                        if (_pageRoleManager == null)
                        {
                            _pageRoleManager = new PageS.RBAC.Page_RoleManager();
                        }
                        _mvvmLoad?.App_DbOperate.RoleManagerLoad(); // 加载角色管理器数据
                        DealWithPageChange(_pageRoleManager);
                    }
                    break;
                case "UserManager":
                    {
                        if (_pageUserManager == null)
                        {
                            _pageUserManager = new PageS.RBAC.Page_UserManager();
                        }
                        DealWithPageChange(_pageUserManager);
                    }
                    break;
                case "PageManager_Detail_Add":
                    {
                        if (_pagePageManagerDetail == null)
                        {
                            _pagePageManagerDetail = new PageS.RBAC.Page_PageManager_Detail();
                        }
                        EditID = ""; // 清空编辑ID，表示新建页面
                        _mvvmLoad?.App_DbOperate.MakeNewPage(); // 创建新页面
                        DealWithPageChange(_pagePageManagerDetail);
                    }
                    break;
                case "PageManager_Detail_Edit":
                    {
                        if (_pagePageManagerDetail == null)
                        {
                            _pagePageManagerDetail = new PageS.RBAC.Page_PageManager_Detail();
                        }
                        _mvvmLoad?.App_DbOperate.EditPage(EditID); // 查询一下数据
                        DealWithPageChange(_pagePageManagerDetail);
                    }
                    break;
                case "返回":
                    {
                        // 返回到之前的页面
                        BackToPreviousPage();
                    }
                    break;
                default:
                    MessageBox.Show($"未知页面名称: {pageName}");
                    break;
            }
        }

        /// <summary>
        /// 处理页面切换逻辑
        /// </summary>
        /// <param name="newPage"></param>
        private void DealWithPageChange(UserControl newPage)
        {
            // 处理页面切换逻辑，例如记录上一个页面等
            if (CurrentPage != null)
            {
                PreviousPage = CurrentPage; // 记录当前页面为上一个页面
            }
            CurrentPage = newPage; // 切换到新页面
        }

        private void BackToPreviousPage()
        {
            if (PreviousPage != null)
            {
                CurrentPage = PreviousPage; // 切换回上一个页面
                PreviousPage = null; // 清空上一个页面
            }
            else
            {
                MessageBox.Show("没有上一个页面可返回。");
            }
        }
    }

    /// <summary>
    /// 用于转换按钮文本的可见性
    /// 目前供菜单区域使用。如果用户已登录，就要显示菜单，否则就隐藏菜单。
    /// </summary>
    internal class HomePageBottonTextVisibilityConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value is null)
            {
                return Visibility.Visible; // 返回可见性
            }
            else
            {
                return Visibility.Hidden; // 返回可见性
            }
                
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

    /// <summary>
    /// 用于转换按钮文本的帮助类
    /// </summary>
    internal class AddButtonOrEditbuttonTextConvertHelper : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value.ToString()=="")
            {
                return "新增";
            }
            else
            {
                return "保存";
            }
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}
